core: Make --recompose skip passed arguments if they were already composed
authorColin Walters <walters@verbum.org>
Fri, 6 Jan 2012 19:04:39 +0000 (14:04 -0500)
committerColin Walters <walters@verbum.org>
Fri, 6 Jan 2012 19:04:39 +0000 (14:04 -0500)
This allows us to do "--recompose -b foo bar baz" and add bar and baz
iff they weren't already there.

src/ostree/ot-builtin-compose.c
tests/t0004-compose.sh

index 6e810876ef225afcc7de060ccf46f6731a4e2333..15e1bb8831fc5c5e93de29fac985fc0b3e06651c 100644 (file)
@@ -78,6 +78,7 @@ ostree_builtin_compose (int argc, char **argv, GFile *repo_path, GError **error)
   OstreeCheckout *checkout = NULL;
   char *parent = NULL;
   GFile *destf = NULL;
+  GHashTable *seen_branches = NULL;
   gboolean compose_metadata_builder_initialized = FALSE;
   GVariantBuilder compose_metadata_builder;
   gboolean commit_metadata_builder_initialized = FALSE;
@@ -144,6 +145,8 @@ ostree_builtin_compose (int argc, char **argv, GFile *repo_path, GError **error)
 
       g_assert (parent);
       g_assert (parent_commit);
+
+      seen_branches = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
       
       g_variant_get_child (parent_commit, 1, "@a{sv}", &parent_commit_metadata);
 
@@ -167,12 +170,17 @@ ostree_builtin_compose (int argc, char **argv, GFile *repo_path, GError **error)
                            &compose_metadata_builder,
                            error))
             goto out;
+
+          g_hash_table_insert (seen_branches, g_strdup (branch_name), (char*)branch_name);
         }
     }
   
   for (i = 1; i < argc; i++)
     {
       const char *src_branch = argv[i];
+
+      if (seen_branches && g_hash_table_lookup (seen_branches, src_branch))
+        continue;
       
       if (!add_branch (repo, mtree, src_branch,
                        &compose_metadata_builder,
@@ -239,6 +247,8 @@ ostree_builtin_compose (int argc, char **argv, GFile *repo_path, GError **error)
   g_free (parent);
   g_free (contents_checksum);
   g_free (commit_checksum);
+  if (seen_branches)
+    g_hash_table_destroy (seen_branches);
   ot_clear_gvariant (&commit_metadata);
   ot_clear_gvariant (&parent_commit);
   ot_clear_gvariant (&parent_commit_metadata);
index 1a65c432c7af077ab64d21165462df70b6961f5b..5014c00daf966047838111cad920fa5e8ca488df 100755 (executable)
@@ -19,7 +19,7 @@
 
 set -e
 
-echo "1..6"
+echo "1..7"
 
 . libtest.sh
 
@@ -91,3 +91,11 @@ $OSTREE checkout some-compose some-compose-checkout
 cd some-compose-checkout
 assert_file_has_content ./usr/bin/bar 'updated bar ELF file'
 echo 'ok recompose'
+
+cd "${test_tmpdir}"
+$OSTREE compose --recompose -b some-compose -s 'Recompose' artifact-barapp
+rm -rf some-compose-checkout
+$OSTREE checkout some-compose some-compose-checkout
+cd some-compose-checkout
+assert_file_has_content ./usr/bin/bar 'updated bar ELF file'
+echo 'ok recompose with args'